#include "gpio_uart.h"

// 假设 TX 和 RX 是 GPIOA 的 5 和 6 引脚
#define TX_PIN 5
#define RX_PIN 6

// 模拟硬件的寄存器操作（这里只是伪代码）
#define GPIO_PORTA  ((volatile uint32_t *)0x40020000)
#define GPIO_PIN_SET(pin)    (*(GPIO_PORTA) |= (1 << (pin)))
#define GPIO_PIN_CLEAR(pin)  (*(GPIO_PORTA) &= ~(1 << (pin)))
#define GPIO_PIN_READ(pin)   ((*(GPIO_PORTA) & (1 << (pin))) ? 1 : 0)

//===================================================================
// 平台相关函数实现
void platform_init_tx(void)
{
    // 配置 TX_PIN 为输出（伪代码）
}

void platform_init_rx(void)
{
    // 配置 RX_PIN 为输入（伪代码）
}

void platform_set_tx_high(void)
{
    GPIO_PIN_SET(TX_PIN);
}

void platform_set_tx_low(void)
{
    GPIO_PIN_CLEAR(TX_PIN);
}

uint8_t platform_read_rx(void)
{
    return GPIO_PIN_READ(RX_PIN);
}

void platform_delay_us(uint32_t delay)
{
    volatile uint32_t count = (SystemCoreClock / 1000000) * delay / 5;
    while (count--)
    {
        __NOP(); // 空操作
    }
}

// 定义接口实现
GPIO_UART_Interface platform_uart_interface = {
    .init_tx = platform_init_tx,
    .init_rx = platform_init_rx,
    .set_tx_high = platform_set_tx_high,
    .set_tx_low = platform_set_tx_low,
    .read_rx = platform_read_rx,
    .delay_us = platform_delay_us,
};
//=================================================================
int main(void)
{
    // 初始化 GPIO 模拟串口
    GPIO_UART_Init(&platform_uart_interface);

    char message[] = "Hello, GPIO UART!\r\n";
    uint8_t received_byte;

    while (1)
    {
        // 发送字符串
        GPIO_UART_SendString(message);

        // 接收 1 个字节
        received_byte = GPIO_UART_ReceiveByte();

        // 将接收到的字节重新发送回去
        GPIO_UART_SendByte(received_byte);
    }
}
